// =======================================================================
// 
//       Filename:  textelement.cpp
// 
//    Description:  
// 
//        Version:  1.0
//        Created:  20.04.2010 00:53:56
//       Revision:  none
//       Compiler:  g++
// 
//         Author:  Dominik 'domachine' Burgdörfer (-), dominik.burgdoerfer@googlemail.com
//        Company:  -
// 
// =======================================================================

#include "textelement.hpp"
#include <stdexcept>

using namespace std;

namespace webplodder {
    namespace Template {
        TextElement::TextElement(File& parent, 
                                 Element::Type type)
            : Element(parent, type),
              mBegin(-1), mEnd(-1),
              mIterator(0)
        {

        }

        TextElement::TextElement(File& parent, int begin, int end,
                                 Element::Type type)
            : Element(parent, TEXT),
              mBegin(begin), mEnd(end),
              mIterator(0)
        {

        }

        TextElement::~TextElement() {
        }

        int TextElement::begin() const
        {
            return mBegin;
        }

        void TextElement::setBegin(int begin)
        {
            mBegin = begin;
        }

        int TextElement::end() const
           
        {
            return mEnd;
        }

        void TextElement::setEnd(int end)
        {
            mEnd = end;
        }

        void TextElement::setInput(CIterator& input)
        {
            mIterator = &input;
            while(mIterator->position() < begin())
                mIterator->moveForward();
        }

        bool TextElement::getChar(char& ch)
        {
            if(begin() < 0)
                return false;
            if(mIterator == 0)
                throw logic_error("No input iterator set");

            if(mIterator->good() && mIterator->position() < (end()-1)) {
                ch = mIterator->currentChar();
                mIterator->moveForward();
                return true;
            }
            else {
                mIterator = 0;
                return false;
            }
        }
    }
}
